{% extends "howto" %}

{% block main %}
<h2>Ajouter des Outils</h2>
<p>Les <em>Outils</em> doivent être déclarés dans le <a href="howto/kit-config-file">fichier de configuration du kit</a>. Le nom doit être valide pour les variables PHP (au moins une lettre suivi de lettres, chiffres et underscores).</p>

<p>La classe de l'outil doit être fournie soit par le kit, et il faut alors la lister dans la section [load_files], soit par un kit tiers qui doit alors être listé dans les dépendances.</p>

<p>Il est possible d'inclure à la racine du kit un fichier de configuration qui sera importé à l'instanciation. Il faut alors le nommer comme l'outil suivi de <q>.tool.ini</q>.</p>

<p>Ajoutons un outil <q>HttpRealmTool</q>, nommé <q>realm</q> au kit <q>example</q>. Cet outil est fourni par le kit <q>webappkit.httprealm</q>. On edite le fichier de configuration de <q>example</q> (c'est à dire <q>example.wak/wak.ini</q>) :</p>
<code>[load_kits]
10 = "webappkit.httprealm"

[tools]
realm = "HttpRealmTool"</code>

<p>On crée un fichier de configuration (qui en l'occurence liste les utilisateurs) nommé <q>realm.tool.ini</q>. Le format de ces fichiers est spécifique à chaque classe d'outil. On peut alors utiliser cet outil, avec la configuration propre au kit :</p>
<code>// obtention du kit example
<var>$example</var>=&amp;Webappkit::getkit('example');

// utilisation de l'outil realm
<var>$example</var>-><var>realm</var>->login();</code>

<h3>Construire des outils</h3>
<p>Les Outils sont des objets d'une classe héritant de WakTool.
Ils doivent impérativement implementer la méthode Factory pour l'instanciation :</p>
<code>class ExampleTool extends WakTool {
    /**
    * a Factory function : every Tool has to implement it
    * this is because some PHP limitations
    * @static
    * @param string <var>$kit</var> kit's id
    * @param array <var>$cfg</var> configuration data taken from ini file
    * @return object tool's instance
    */
    function &amp; Factory(<var>$kit</var>,<var>$cfg</var>) {
        return new ExampleTool(<var>$kit</var>,<var>$cfg</var>);
    }

    /**
    * @var array the default configuration values
    */
    var <var>$cfg</var>=array('section'=>array(
        'var'=>'value'));
}</code>

<p>Les données du fichier de configuration seront intégrées au sein de <var>$cfg</var>.</p>
{% endblock %}
